﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using Tibet.Entidades;
using Tibet.Datos;

using MiLogica = Tibet.Logica;
using Tibet.Logica.Comandos;
using Tibet.Logica.FabricaLogica;
using Tibet.Datos.Interfaces;
using Tibet.Logica.Comandos.ComandoMotorMetrica;
using Tibet.Datos.FabricaDatos;

namespace Tibet.Pruebas
{
    [TestFixture]
    class PruebaPerfilMetrica
    {
        [TestCase]
        public void PruebaCrearPerfilMetrica()
        {

            //Atributos que se van a insertar en la prueba
            PerfilMetrica perfilPrueba = new PerfilMetrica();
            perfilPrueba.NombrePerfilMetrica = "Perfil Metrica Prueba";
            

            List< Metrica > listaMetricas = new List< Metrica >();
          
            Metrica metrica = new Metrica();
            metrica.IdMetrica = 1;
            metrica.NombreMetrica = "MetricaAtributosEstaticos";
            metrica.Descripcion = "Indica el numero de atributos que contiene un archivo de un proyecto";
            
            listaMetricas.Add(metrica);
            
            Metrica metrica1 = new Metrica();
            
            metrica1.IdMetrica = 3;
            metrica1.NombreMetrica = "MetricaNumeroClases";
            metrica1.Descripcion = "Indica el numero de clases que contiene un archivo de un proyecto";

            listaMetricas.Add(metrica1);            



            //Ejecutamos el comando para crear perfil metrica
            Comando crearPerfilMetrica = FabricaComandoMetrica.ObtenerComandoCrearPerfilMetrica(perfilPrueba);                        
            crearPerfilMetrica.Ejecutar();



            //Interfaz para acceder al DAO de metricas
            IDaoAccesoMetrica perfilmetricas = FabricaDao.ObtenerFabricaDeDao(1).ObtenerDaoSqlServerMetrica();
            


            //Ejecutamos metodo en el DAO para buscar el ID del perfil que creamos
            int idPerfilMetrica  = perfilmetricas.ConsultarPerfilMetricaNombre(perfilPrueba.NombrePerfilMetrica);
            
            


            //Ejecutamos el DAO para insertar a la debil
            foreach (Metrica misMetrica in listaMetricas)
            {
                perfilmetricas.InsertarPerfilMetricaMetrica(idPerfilMetrica, misMetrica.IdMetrica);
            }                     
                      
            

            //Consultamos el perfil que creamos 
            PerfilMetrica perfilPruebaAuxiliar = new PerfilMetrica();
            perfilPruebaAuxiliar = (PerfilMetrica)perfilmetricas.ConsultarPerfilMetricaMetricas(idPerfilMetrica);


            perfilPrueba.IdPerfilMetrica = idPerfilMetrica;
            perfilPrueba.MisMetricas = listaMetricas;
           
            Assert.AreEqual(perfilPrueba.NombrePerfilMetrica, perfilPruebaAuxiliar.NombrePerfilMetrica);
            Assert.AreEqual(perfilPrueba.MisMetricas[0].IdMetrica, perfilPruebaAuxiliar.MisMetricas[0].IdMetrica);
            Assert.AreEqual(perfilPrueba.MisMetricas[1].IdMetrica, perfilPruebaAuxiliar.MisMetricas[1].IdMetrica);
           



        }
    }
}
